package com.hdf.etdemo.map.baidu;

import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.MapStatus;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.Marker;
import com.baidu.mapapi.map.MarkerOptions;
import com.baidu.mapapi.map.MyLocationData;
import com.baidu.mapapi.map.OverlayOptions;
import com.baidu.mapapi.model.LatLng;
import com.hdf.easytools.base.EasyToolsActivity;
import com.hdf.etdemo.R;
import com.hdf.etdemo.R.id;
import com.hdf.etdemo.R.layout;

import android.app.Activity;
import android.os.Bundle;
import android.text.Html;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class BaiDuMapActivity extends EasyToolsActivity {
	private MapView mMapView = null;
	private BaiduMap mBaiduMap;

	private TextView mapMessage;
	private Button markBtn;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_bai_du_map);
		/** 设置标题显示 */
		this.TitleVisib(0, 1, 1, 0, 0);
		/** 绑定标题点击事件 */
		this.TitleClick(0, 1, 0, 0, 0);
		/** 设置标题样式ʽ */
		this.TitleStyle(null, R.drawable.et_back, "百度地图", null, 0);
		mapMessage = (TextView) findViewById(R.id.map_message);
		mMapView = (MapView) findViewById(R.id.bmapView);
		markBtn=(Button) findViewById(R.id.mulch);
		markBtn.setOnClickListener(this);
		mBaiduMap = mMapView.getMap();
		// 普通地图 BaiduMap.MAP_TYPE_NORMAL
		// 卫星地图 BaiduMap.MAP_TYPE_SATELLITE
		mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
		// 开启交通图
		// mBaiduMap.setTrafficEnabled(true);
		// 开启城市热力图
		// mBaiduMap.setBaiduHeatMapEnabled(true);
		updateMyLocation();
	}

	/**
	 * 地图上添加覆盖物
	 */
	public void maker(double Longitude, double Latitude) {
		// 定义Maker坐标点
		LatLng point = new LatLng(Longitude, Latitude);
		// 构建Marker图标
		BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.drawable.icon_marka);
		// 构建MarkerOption，用于在地图上添加Marker
		OverlayOptions option = new MarkerOptions().position(point).icon(bitmap);
		// 在地图上添加Marker，并显示
		mBaiduMap.addOverlay(option);
	}

	/**
	 * 定位
	 */
	private LocationClient locationClient = null;

	/**
	 * 更新自己的位置
	 */
	private void updateMyLocation() {
		locationClient = new LocationClient(this);
		// baiduMap.setMyLocationEnabled(true);
		// 注册位置监听
		locationClient.registerLocationListener(new MyLocationListener());
		// 创建定位模式
		LocationClientOption option = new LocationClientOption();
		// 设置定位模式
		option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);
		// 返回的定位结果是百度经纬度,默认值gcj02
		option.setCoorType("bd09ll");
		// 打开GPS
		option.setOpenGps(true);
		// 设置发起定位请求的时间间隔
		option.setScanSpan(5000);
		// 设置是否返回定位结果 包括地址信息
		option.setIsNeedAddress(true);
		// 设置返回结果是否包含手机机头的方向
		option.setNeedDeviceDirect(true);
		// 添加模式
		locationClient.setLocOption(option);
		// 开始定位
		locationClient.start();
	}

	// 我的位置
	private Marker myLocatioMarker = null;
	// 表示 是不是第一次定位 如果是第一次定位就在地图上绘制出 自己的位置 用图标代替 否则不绘制
	private boolean isfirstLocation = true;
	private Double Longitude;// 经度
	private Double Latitude;// 维度
	private String City;// 城市
	private String CityID;// 城市Id
	private String time;// 时间
	private String address;// 地址
	private String jiedao;// 街道

	class MyLocationListener implements BDLocationListener {
		@Override
		public void onReceiveLocation(BDLocation bdLocation) {
			if (bdLocation == null) {
				Log.i("=========定位失败", "");
				return;
			}
			// 打印出自己的位置信息
			Log.i("============我的位置信息", "" + bdLocation.getAddrStr());
			Latitude = bdLocation.getLatitude(); // 获取经度
			Longitude = bdLocation.getLongitude(); // 获取纬度
			City = bdLocation.getCity();
			CityID = bdLocation.getCityCode();
			time = bdLocation.getTime();
			address = bdLocation.getAddrStr();
			Log.d("info", "经度" + Longitude + "纬度" + Latitude);
			maker(Latitude, Longitude);
			setMssage();
			mapCenter();
		}
	}
/**
 * 使用html显示信息
 */
	public void setMssage() {
		StringBuffer sb = new StringBuffer();
		sb.append("<p>经度：");
		sb.append(Latitude);
		sb.append("&nbsp; &nbsp;<span style=\"line-height:1.5;\">维度：");
		sb.append(Longitude);
		sb.append("</span></p><p>地址:");
		sb.append(address);
		sb.append("</p><p><span style=\"line-height:1.5;\">城市：");
		sb.append(City);
		sb.append("&nbsp; &nbsp;</span><span style=\"line-height:1.5;\">城市id:");
		sb.append(CityID);
		sb.append("&nbsp; &nbsp; &nbsp;</span><span style=\"line-height:1.5;\">时间：");
		sb.append(time);
		sb.append("</span></p>");
		mapMessage.setText(Html.fromHtml(sb.toString()));
	}
/**
 * 设置地图中心及比例
 */
	public void mapCenter() {
		// 设定中心点坐标
		LatLng cenpt = new LatLng(Latitude, Longitude);
		// 定义地图状态比例
		MapStatus mMapStatus = new MapStatus.Builder().target(cenpt).zoom(15).build();
		// 定义MapStatusUpdate对象，以便描述地图状态将要发生的变化
		MapStatusUpdate mMapStatusUpdate = MapStatusUpdateFactory.newMapStatus(mMapStatus);
		// 改变地图状态
		mBaiduMap.setMapStatus(mMapStatusUpdate);
	}

/**
 * 设置多个覆盖物	
 */

	
	
	
	
	
	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		switch (v.getId()) {
		case R.id.left_img:
			finish();
			break;
		case R.id.mulch:
			GoActivity(BaiDuMarkActivity.class);
			break;
		default:
			break;
		}
	}

	@Override
	protected void onDestroy() {
		super.onDestroy();
		// 在activity执行onDestroy时执行mMapView.onDestroy()，实现地图生命周期管理
		mMapView.onDestroy();
	}

	@Override
	protected void onResume() {
		super.onResume();
		// 在activity执行onResume时执行mMapView. onResume ()，实现地图生命周期管理
		mMapView.onResume();
	}

	@Override
	protected void onPause() {
		super.onPause();
		// 在activity执行onPause时执行mMapView. onPause ()，实现地图生命周期管理
		mMapView.onPause();
	}
}
